def shell_sort(arr):
    # 获取数组的长度
    n = len(arr)
    # 初始增量设为数组长度的一半
    gap = n // 2

    while gap > 0:
        # 对每个间隔进行插入排序
        for i in range(gap, n):
            temp = arr[i]
            j = i
            # 比较相隔gap的元素，进行插入排序
            while j >= gap and arr[j - gap] > temp:
                arr[j] = arr[j - gap]
                j -= gap
            arr[j] = temp
        # 缩小增量
        gap = gap // 2
    return arr

# 示例使用
if __name__ == "__main__":
    arr = [12, 34, 54, 2, 3]
    print("排序前的数组:", arr)
    sorted_arr = shell_sort(arr)
    print("排序后的数组:", sorted_arr)